﻿Imports System.Runtime.InteropServices
'Imports ConfigurationManagement


Module SDK_Comercial_Funciones
    Public sURLSACI As String
    Public gEmpActiva As Integer
    Public sUsuario As String
    Public sPassword As String
    Public gGuidCom As String
    Public gGuidTablas As String
    Public szDirectorioBase As String
    'Public comComercialMain As CONTPAQiComercial.Comercial
    'Public gTablas As CONTPAQiComercial.TTInterfazTabla
    Private nIdEmp As Long
    Private sNomEmp As String
    Private err As Integer
    Public Function fSDK_Inicializa(ByVal aRutaArchivos As String) As Long

        Dim lRet As Long
        Dim lmsgError As String
        Dim lResult As Long
        Dim i As Long
        Dim fs As Object
        Dim hRegKey As Long
        Dim MyAddIn As Object
        Dim lAddInExiste As Boolean
        Dim lMsgErr As String
        Dim lBufSize As Long
        Dim szEntrada As String, lArchivoAddIn As String
        Dim lDirectorioBin As String
        Dim labrir As Boolean
        Dim lrespu As Boolean


        'On Error GoTo Error_fSDK_Inicializa


        Dim key As Microsoft.Win32.RegistryKey
        key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(SDK_Comercial.szRegKeyAdminPAQ64)
        Dim lEntrada As String = CType(key.GetValue("DirectorioBase"), String)

        ' Obtenemos Directorio de Reportes
        'lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ, 0, 1, hRegKey)
        'If lResult <> 0 Then
        ' lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ64, 0, 1, hRegKey)
        'End If

        'If lResult <> 0 Then
        'MsgBox("No se pudo leer el registro de windows", MsgBoxStyle.Exclamation, "Aviso")
        'fSDK_Inicializa = 999
        'Exit Function
        'End If

        lDirectorioBin = Space(255)
        lBufSize = Len(lEntrada)
        'lResult = SDK_Comercial.RegQueryValueEx(hRegKey, "DirectorioBase", 0, 0, lDirectorioBin, lBufSize)
        'If lResult <> 0 Then
        'Exit Function
        'End If
        lDirectorioBin = Mid(lEntrada, 1, lBufSize)
        SDK_Comercial.SetCurrentDirectory(lDirectorioBin)

        'lResult = SDK_Comercial.RegCloseKey(hRegKey)

        IniciarSDK("C:\Program Files (x86)\Compac\ConfiguradorADD", lDirectorioBin)
        fSDK_Inicializa = 0
        Exit Function

        'lRet = SDK_Comercial.SetCurrentDirectory(lEntrada.ToString())
        'If lRet <> 0 Then
        'lmsgError = Space(256)
        'SDK_Comercial.fError(lRet, lmsgError, 256)
        'MsgBox("Hubo un error al cambiar la ruta de entrada." & Chr(10) & Chr(10) & "Error no.: " & Trim(Str(lRet)) & Chr(10) & lmsgError, vbExclamation + vbOKOnly, "Error")
        'fSDK_Inicializa = lRet
        'Exit Function
        'End If


        'lRet = SDK_Comercial.fSetNombrePAQ("CONTPAQ I COMERCIAL")

        'If lRet <> 0 Then
        'lmsgError = Space(256)
        'SDK_Comercial.fError(lRet, lmsgError, 256)
        'MsgBox("Hubo un error al inicializar el SDK. " & Chr(10) & Chr(10) & "Error no.: " & Trim(Str(lRet)) & Chr(10) & lmsgError, vbExclamation + vbOKOnly, "Error")
        'fSDK_Inicializa = lRet
        'Exit Function
        'End If

        'lRet = SDK_Comercial.fAbreEmpresa(aRutaArchivos)
        'If lRet <> 0 Then
        ' lmsgError = Space(256)
        ' SDK_Comercial.fError(lRet, lmsgError, 256)
        ' MsgBox("Hubo un error al abrir la empresa en la ruta:" & Chr(10) & aRutaArchivos _
        '        & Chr(10) & Chr(10) & "Error no.: " & Trim(Str(lRet)) & Chr(10) & lmsgError, vbExclamation + vbOKOnly, "Error")
        ' Call SDK_Comercial.fTerminaSDK()
        ' fSDK_Inicializa = lRet
        ' Exit Function
        ' End If

Error_fSDK_Inicializa:
        MsgBox("Hubo un error al inicializar el SDK." & Chr(10) & Chr(10) & "Error no.: " & Trim(Str(lRet)) & Chr(10) & lmsgError, vbExclamation + vbOKOnly, "Error")
        fSDK_Inicializa = lRet


    End Function
    Sub IniciarSDK(ByVal DirectorioADD As String, ByVal DirectorioBin As String)
        Dim lResult As Long
        Dim hRegKey As Long
        Dim aIdUsuario As Long
        Dim aNombreUsuario As String
        Dim aPerfilUsuario As Long
        Dim aListaPersmisos As String
        Dim aListaEstados As String
        Dim aListaDescripciones As String
        Dim lConfig As String
        Dim lstrREsultado As String
        '  Dim lComConfig As New ConfigurationManagement.ConfigurationManagement(DirectorioADD)


        Dim lPosicion As Long
        Dim lError As Long
        Dim lResultado As Long

        Dim szEntrada As String = Microsoft.VisualBasic.Space(256)
        Dim lBufSize As Long
        Dim lRuta As String

        On Error GoTo manejaError

        'lComConfig =

        ' sURLSACI = lComConfig.GetValueToString("ConfigurationClient", "SaciClient", "SaciEndPoint") + "adminpaq"

        'lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ2001, 0, 1, hRegKey)
        'If lResult <> 0 Then
        'lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ200164, 0, 1, hRegKey)
        'End If

        'If lResult = 0 Then

        szEntrada = Space(255)
        lBufSize = Len(szEntrada)
        'lResult = SDK_Comercial.RegQueryValueEx(hRegKey, "DirectorioBase", 0, 0, szEntrada, lBufSize)
        'If lResult = 0 Then
        'Pone el null string al final del path
        'For i = lBufSize To Len(szEntrada)
        'Mid(szEntrada, i, 1) = Chr(32)
        'Next
        'End If

        'lResult = SDK_Comercial.RegCloseKey(hRegKey)
        szEntrada = DirectorioBin
        lRuta = Trim(szEntrada) & "\ContPAQiComercial.exe"

        'lResult = Shell(lRuta, 1)

        'le agregamos a la variable PATH la ruta del directorio BIN
        'szvar = Trim(szEntrada) & ";" & Trim(szvar)
        'Else
        'MsgBox("No se pudo leer el registro de windows", MsgBoxStyle.Exclamation, "Aviso")
        'Exit Sub 'En caso de problemas al leer el registro, sale

        'End If

        gEmpActiva = 0

        ' Obtenemos directorio de datos
        ' Se obtiene desde el registry la ruta del directorio de empresas
        'Call GetDirectorioBase()   ' Inicializa a la variable szDirectorioBase
        szDirectorioBase = Space(255)
        szDirectorioBase = DirectorioBin

        ' comComercialMain = Nothing
        'gTablas = Nothing

        'Inicializa COM
        ' If comComercialMain Is Nothing Then
        'comComercialMain = New CONTPAQiComercial.Comercial
        'si es local inicilizar asi
        'Call comComercialMain.sistemaInicializar("CONTPAQ I Comercial", 10, sResultado, lResultado)
        'Call comComercialMain.seguridadValidaUsuario(1, "SUPERVISOR", "", aIdUsuario, aNombreUsuario, aPerfilUsuario, aListaPersmisos, aListaEstados, aListaDescripciones, lResultado)
        '   End If

        szEntrada = Space(255)
        lBufSize = Len(szEntrada)
        'lResult = SDK_Comercial.RegQueryValueEx(hRegKey, "ULTIMOUSUARIO", 0, 0, szEntrada, lBufSize)
        'If lResult = 0 Then
        'Pone el null string al final del path
        'For i = lBufSize To Len(szEntrada)
        'Mid(szEntrada, i, 1) = Chr(32)
        'Next
        'End If
        'lResult = SDK_Comercial.RegCloseKey(hRegKey)
        Dim key As Microsoft.Win32.RegistryKey
        key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(SDK_Comercial.szRegKeyAdminPAQ64)
        Dim lEntrada As String = CType(key.GetValue("ULTIMOUSUARIO"), String)

        szEntrada = lEntrada

        Dim loggin As New frmLogginAdmin
        loggin.txtUsuario.Text = Trim(szEntrada)
        loggin.txtPassword.Text = ""
        loggin.ShowDialog()


        If loggin.DialogResult = DialogResult.Cancel Then
            Exit Sub
        End If


        sUsuario = Trim(loggin.txtUsuario.Text)
        sPassword = Trim(loggin.txtPassword.Text)

        '  If gTablas Is Nothing Then
        'gTablas = New CONTPAQiComercial.TTInterfazTabla
        'si es terminal inicializar asi
        'lError = gTablas.InicializarComunicacion(sURLSACI, "CONTPAQ I Comercial", 10, "", gGuidCom, lConfig)
        'Call comComercialMain.ProcesarUnaFuncion("SetUrl", sURLSACI + SDK_Comercial.kTokenSeparadorSACICOM + gGuidCom, "", lstrREsultado, lResultado)
        'Call comComercialMain.seguridadValidaUsuario(1, sUsuario, sPassword, aIdUsuario, aNombreUsuario, aPerfilUsuario, aListaPersmisos, aListaEstados, aListaDescripciones, lResultado)

        lPosicion = InStr(lConfig, ",gGuidT")
        gGuidTablas = Right(lConfig, Len(lConfig) - lPosicion - 7)
        'End If

        DlgInsertarEmpresa_Insertar()

        Exit Sub

manejaError:
        MsgBox("Ocurrió un error al iniciar la sesión. Verifique que la contraseña sea correcta e intente de nuevo.", vbOKOnly + vbExclamation, "CONTPAQ i® COMERCIAL")

    End Sub
    Sub DlgInsertarEmpresa_Insertar()
        Dim sIdEmp As String
        Dim sdir As String
        Dim sEmpSel As String
        Dim sUbicEmp As String
        'Dim lEjerEmp As Long
        'Dim lIdEmp As Long
        'Dim renglon As Integer
        'Dim lIdEjer As Long
        Dim lEjer As Long
        Dim lResultado As Long
       'Dim sRutEmp As String
        Dim astr As String
        Dim lsEjercicio As String

        Dim DirectorioDatos As String = BuscarStrDatoInicial("SELECT RUTADATOS FROM EMPRESAS WHERE ADMINPAQ='" & Comercial & "'")
        Dim IdEmpresa As Integer = BuscarIntDatoComercialInicial("SELECT CIDEMPRESA FROM EMPRESAS WHERE CRUTADATOS='" & DirectorioDatos & "'")


        'TEMPORAL

        'Call comComercialMain.empresasGetListaEmpresas(aListaEmpresas, aListaRutas, aListaIds, aListaRespaldos, lResultado)
        'lListaRutas = Split(formateacomas(aListaRutas), ",")

        ' Validamos que haya elementos en la lista de empresas
        'If Workbooks(kSistema).DialogSheets("DlgInsertarEmpresa").ListBoxes(1).ListCount > 0 Then
        ' Buscamos renglon vacio para insertar la empresa
        ' For renglon = 1 To 30
        sdir = DirectorioDatos
        'If Len(sdir) = 0 Then

        sNomEmp = Space(151)

        Dim NombreEmpresa As String = BuscarSTRDatoComercialInicial("SELECT CNOMBREEMPRESA FROM EMPRESAS WHERE CIDEMPRESA=" & IdEmpresa)
        nIdEmp = IdEmpresa
        sEmpSel = NombreEmpresa
        sIdEmp = IdEmpresa
        ' abrimos la empresa
        '********** astr = quitaComaComillas(lListaRutas(nIdEmp - 1))
        astr = DirectorioDatos
        'Call comComercialMain.sistemaInicializar()
        'Call comComercialMain.sistemaInicializar("CONTPAQ I Comercial", 10, aConfiguracion, lResultado)


        'Call comComercialMain.empresaAbrir(astr, 0, 0, 0, 0, 0, aConfiguracion, lResultado)
        'lConfiguracion = Split(aConfiguracion, ",")
        'For Each config In lConfiguracion
        'If InStr(1, config, "gEjercicioActual=", vbTextCompare) > 0 Then
        'lEjer = CInt(Mid(config, InStr(1, config, "=", vbTextCompare) + 1, 4))
        'End If
        'Next
       
        ' Obtenemos Directorio de Reportes
        'lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ, 0, 1, hRegKey)
        'If lResult <> 0 Then
        ' lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ64, 0, 1, hRegKey)
        'End If

        'If lResult <> 0 Then
        'MsgBox("No se pudo leer el registro de windows", MsgBoxStyle.Exclamation, "Aviso")
        'fSDK_Inicializa = 999
        'Exit Function
        'End If

       

        '  Call comComercialMain.ProcesarUnaFuncion("Dato_Ejercicio_Actual", "", astr, lsEjercicio, lResultado)

        lEjer = lsEjercicio

        If Not (lEjer > 0) Then
            MsgBox("La empresa no tiene ningun periodo activo", MsgBoxStyle.Exclamation, "Aviso")
            Exit Sub

        End If
        ' Obtenemos datos de la empresa
        'dbFieldChar hDbcLocal, GEMPRESAS, GEMPR_UBICACION, sUbicEmp, 256
        'Call DesProtegeHoja()
        ' Actualizamos la hoja
        '********sUbicEmp = quitaComaComillas(lListaRutas(nIdEmp - 1))
        '*********ActiveSheet.Cells(renglon + 3, 2).Value = Mid(sEmpSel, 6)
        '*********ActiveSheet.Cells(renglon + 3, 3).Value = "'" & Trim(Mid(sUbicEmp, 1, 256))
        'Call ProtegeHoja()
        ' Abrimos la empresa para que se pueda utilizar

        ' Creamos conexión
        sUbicEmp = Space(256)
        sUbicEmp = DirectorioDatos

        ' Empresa Activa
        'If gEmpActiva = 0 Then
        'gEmpActiva = 1
        'ActiveSheet.Cells(2, 4) = gEmpActiva
        'End If


        'ActiveSheet.Cells(renglon + 3, 4).Value = lEjer
        'End If
        ' Termina busqueda
        'Exit For
        'End If
        ' Next
        'End If
    End Sub
    Function formateacomas(aListaEmpresas As String) As String
        Dim salida As String
        Dim i As Integer
        Dim omite As Integer

        i = 1
        omite = 1
        While i < Len(aListaEmpresas) + 1
            If Mid(aListaEmpresas, i, 1) = """" Then
                omite = omite * -1
            End If
            If Mid(aListaEmpresas, i, 1) = "," Then
                If omite > 0 Then
                    salida = salida + Mid(aListaEmpresas, i, 1)
                Else
                    salida = salida + "¦"
                End If
            Else
                salida = salida + Mid(aListaEmpresas, i, 1)
            End If
            i = i + 1
        End While
        formateacomas = salida
    End Function

    Public Sub GetDirectorioBase()
        Dim lResult As Long
        Dim hRegKey As Long
        Dim lBufSize As Long
        Dim szEntrada As String

        lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ2001, 0, 1, hRegKey)
        If lResult <> 0 Then
            lResult = SDK_Comercial.RegOpenKeyEx(SDK_Comercial.HKEY_LOCAL_MACHINE, SDK_Comercial.szRegKeyAdminPAQ200164, 0, 1, hRegKey)
        End If
        If lResult <> 0 Then
            Exit Sub
        End If

        szEntrada = Space(255)
        lBufSize = Len(szEntrada)
        lResult = SDK_Comercial.RegQueryValueEx(hRegKey, "DirectorioDatos", 0, 0, szEntrada, lBufSize)
        If lResult <> 0 Then
            Exit Sub
        End If

        For i = lBufSize To Len(szEntrada)
            Mid(szEntrada, i, 1) = Chr(0)
        Next

        ' Asignamos a variable global con el Directorio Base
        szDirectorioBase = Space(255)
        szDirectorioBase = szEntrada

        lResult = SDK_Comercial.RegCloseKey(hRegKey)
    End Sub



    Public Sub fSDK_Termina()

        On Error GoTo Error_fSDK_Termina

        ' Cerrado de la empresa
        Call SDK_Comercial.fCierraEmpresa()

        ' N.D.2883 Indicar al SDK de AdminPAQ que no debe de apagar el motor de la BD ya que el
        ' DBFWin32.dll utiliza una dll de dicho motor
        Call SDK_Comercial.fNoApagarMotorBD()

        ' Terminar el SDK
        Call SDK_Comercial.fTerminaSDK()

Error_fSDK_Termina:
    End Sub
End Module
